查看原文
其他

Java8中 lambda forEach循环与增强for循环性能对比

点击关注 👉 Java技术图谱 2021-12-16

最近新的项目使用jdk1.8版本,于是乎博主想多使用一些lambda的写法,但是对于lambda并不是很了解所以在网上查了一些性能方面的资料,结果瞬间心凉,多数回答为lambda forEach循环性能要比传统循环差,性能甚至差出十几倍。然而,经过博主的测试那些回答是错误的。


性能比的结论为 lambda forEach>增强for,以下给出测试数据。

public static void main(String[] args) { List<User> userList = initList(10000); for (int i = 1; i < 11; i++) { System.out.println("--------------------第" + i + "次"); long t1 = System.nanoTime(); testLambda(userList); long t2 = System.nanoTime(); testForeach(userList); long t3 = System.nanoTime(); System.out.println("lambda---" + (t2 - t1) / 1000 + "μs"); System.out.println("增强for--" + (t3 - t2) / 1000 + "μs"); } } /** * 增强for测试 * @param userList */ private static void testForeach(List<User> userList) { for (User user : userList) { user.hashCode(); } } /** * lambda forEach测试 * @param userList */ private static void testLambda(List<User> userList) { userList.forEach(user -> user.hashCode()); } /** * 初始化测试集合 * @param size * @return */ private static List<User> initList(int size) { List<User> userList = new ArrayList<>(); for (int i = 0; i < size; i++) { userList.add(new User("user" + i, String.valueOf(i))); } return userList; }

输出

--------------------第1次lambda---207637μs增强for--5210μs--------------------第2次lambda---767μs增强for--1739μs--------------------第3次lambda---707μs增强for--3118μs--------------------第4次lambda---716μs增强for--1347μs--------------------第5次lambda---1078μs增强for--1559μs--------------------第6次lambda---773μs增强for--1382μs--------------------第7次lambda---756μs增强for--1213μs--------------------第8次lambda---535μs增强for--840μs--------------------第9次lambda---270μs增强for--576μs--------------------第10次lambda---434μs增强for--513μs

此时可以看出在第一次的时候两者性能相差40倍这可能也是多数人认为它性能较差的原因,但是再后面的执行当中几乎都是lambda的执行速度快,所以博主觉得,lambda的forEach循环在首次执行的时候会初始化部分内容,从而导致执行过慢,在后续的执行当中由于不需要再次进行初始化,所以才展现出真正的实力。


关于其他方面的测试,有兴趣的同学可以自行测试。

来源:blog.csdn.net/asdflwlong/article/details/81538551


近期热文推荐

点个在看你最好看

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存